﻿using module .\Lib\UnitTest.psm1
using module .\CalcRunner.psd1
using module .\CalcRunner.psm1

class CalcRunnerTest : TestBase
{
    [SetUp()]
    [void]SetUp()
    {
        $this.target = [CalcRunner]::new();
        $this.target.TargetPath  = 'C:\KeywordAutoTest\02.AutoTest\01.TestTarget\CalcApp.exe';
        $this.target.LogFilePath = 'C:\KeywordAutoTest\02.AutoTest\02.Runner.ps\Test.log';
        Remove-item $this.target.LogFilePath -Force -ErrorAction Ignore
        $this.target.SetUp();
    }

    [TearDown()]
    [void]TearDown()
    {
        $this.target.TearDown();
    }

    [Test()]
    [void]結果取得テスト()
    {
        $result = $this.target.結果取得();
        $this.AssertEquals('計算結果:金額=[円]', $result );
    }

    [Test()]
    [void]計算実行テスト()
    {
        #値を設定
        $testCase = "単価`t2","個数`t3";
        $this.target.SetKeywordValues($testCase);

        #計算を実行
        $this.target.計算実行();

        #計算結果を確認
        $result = $this.target.結果取得();
        $this.AssertEquals('計算結果:金額=[6円]', $result );
    }

#    [Test()]
	[void]テスト実行テスト()
	{
        #処理の実行
        $testCase = "単価`t12","個数`t34";
        $result = $this.target.テスト実行($testCase);

        #出力されたログの内容を確認
        $lines = Get-Content $this.target.LogFilePath -Encoding UTF8
        $this.AssertEquals('NumericUpDown[単価]値[12]セット', $lines[0] );
        $this.AssertEquals('NumericUpDown[個数]値[34]セット', $lines[1] );
        $this.AssertEquals('計算実行',                       $lines[2] );
        $this.AssertEquals('計算結果:金額=[408円]',            $lines[3] );
	}

}

$error.Clear()
[void](([CalcRunnerTest]::new()).RunTest());
#スクリプトのエラー処理は、ここで行う必要がある
if( ( $error -ne $null ) -and ( $error.Count -ne 0 ) )
{
    $errFlag = $false
    foreach($err in $error)
    {
        if( $err.Exception.GetType().Name -ne 'UnitTestException' )
        {
            if( $errFlag -eq $false )
            {
                $errFlag = $true
                Write-host "`n*****Error info*****"
            }
            $err
        }
    }
}